module mesh_const_mod

  use kinds_mod

  implicit none

  real(r_kind), parameter :: pi        = atan(1.0d0) * 4.0d0
  real(r_kind), parameter :: pi2       = pi * 2.0d0
  real(r_kind), parameter :: pi0p5     = pi * 0.5d0
  real(r_kind), parameter :: pi0p25    = pi * 0.25d0
  real(r_kind), parameter :: rad       = pi / 180.0d0
  real(r_kind), parameter :: deg       = 180.0d0 / pi
  real(r_kind), parameter :: D2R       = PI/180._r16    ! convert degree into radian
  real(r_kind), parameter :: R2D       = 180._r16/PI    ! convert radian into degree
  real(r_kind), parameter :: FillValue = -9999999999999999._r16
  real(r_kind), parameter :: Inf       = huge(Inf)
  real(r_kind), parameter :: NAN       = transfer(-2251799813685248_i8, 1._r8)
  real(r_kind), parameter :: tolerance = 1.e-15

  integer, parameter ::         left = 1
  integer, parameter ::        right = 2
  integer, parameter ::       bottom = 3
  integer, parameter ::          top = 4
  integer, parameter ::  left_bottom = 5
  integer, parameter :: right_bottom = 6
  integer, parameter ::    right_top = 7
  integer, parameter ::     left_top = 8

  ! Domain types
  integer, parameter ::   global_domain = 1
  integer, parameter :: regional_domain = 2

  ! Cell types
  integer, parameter ::      corner_cell = -1
  integer, parameter ::      domain_cell =  0
  integer, parameter ::   left_halo_cell =  1
  integer, parameter ::  right_halo_cell =  2
  integer, parameter :: bottom_halo_cell =  3
  integer, parameter ::    top_halo_cell =  4
end module mesh_const_mod
